package com.gin.no_gay_alliance.callback;

import android.util.Log;

import androidx.annotation.NonNull;

import com.gin.common.utils.StrUtils;
import com.gin.jackson.utils.ObjectUtils;
import com.gin.nga.exception.NgaClientException;
import com.gin.nga.exception.NgaException;
import com.gin.no_gay_alliance.app.MyApplication;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;

/**
 * 回调方法
 *
 * @param <T> 数据类型
 */
public interface Callback<T> {
    /**
     * 请求成功回调
     *
     * @param data 数据
     */
    void onSuccess(T data);

    /**
     * 请求之前执行的操作
     */
    default void beforeRequest() {
    }

    /**
     * 请求失败回调(一般为网络访问错误)
     *
     * @param call call
     * @param e    错误
     */
    default void onFailure(@NonNull Call call, @NonNull IOException e) {
        MyApplication.app.handler.toast(e.getMessage());
    }

    /**
     * 处理Nga异常
     *
     * @param e 异常
     */
    default void handleException(NgaException e) {
        if (e instanceof NgaClientException) {
            Map<Integer, String> reason = ((NgaClientException) e).getReason();
            if (reason != null) {
                String t0 = reason.get(0);
                String t1 = reason.get(1);
                if (!ObjectUtils.isEmpty(t0) && !StrUtils.isNumber(t0)) {
                    MyApplication.app.handler.toast(t0);
                } else if (!ObjectUtils.isEmpty(t1) && !StrUtils.isNumber(t1)) {
                    MyApplication.app.handler.toast(t1);
                }
            }
            Log.d(this.getClass().getSimpleName(), "handleException: " + e.getMessage());
        }
    }
}